perm filename ZDELAY.MUS[MUS,LCS] blob sn#318217 filedate 1977-11-21 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	FUNCTION ZERO(ARRAY Foo)
C00013 ENDMK
C⊗;
FUNCTION ZERO(ARRAY Foo);
  BEGIN VARIABLE Len,I;
   Len←LENGTH(Foo)-1;
   FOR I←0 STEP 1 UNTIL Len DO Foo(I)←0;
  END;

FUNCTION ZDELAY(Input, Curlen, BufLen, ARRAY Buffer, Inptr);
  BEGIN 
  VARIABLE Outptr, RealSamp, Temp;

  Buffer[Inptr] ← Input;                          <Read in the new sample

  Outptr ← Inptr - Curlen;                        <Position readout pointer
  IF Outptr < 0 THEN Outptr ← Outptr + BufLen;    <Might have to wrap around

  Inptr ← Inptr + 1;                              <Always increment input by 1 sample
  IF Inptr ≥ BufLen  THEN Inptr ← 0;              <Wrap around if at end of array

  RealSamp ← INT(Outptr);                         <Find the next lowest real sample
  Temp ← Buffer[RealSamp];			  <Saves some array lookups

  IF RealSamp ≠ (BufLen-1) THEN                   <Interpolation process
    RETURN (Temp +                                           
    ((Outptr-RealSamp) * (Buffer[RealSamp+1]-Temp)))
  ELSE
    RETURN (Temp +
    ((Outptr-(RealSamp)) * (Buffer[0] - Buffer[BufLen-1])));

  Input←0;                                         <Empty input variable.
  END;


FUNCTION SDELAY(Curlen, BufLen, ARRAY Buffer, Inptr); <Just reads out
  BEGIN 
  VARIABLE Outptr, RealSamp, Temp;

  Outptr ← Inptr - Curlen;                        <Position readout pointer
  IF Outptr < 0 THEN Outptr ← Outptr + BufLen;    <Might have to wrap around

  RealSamp ← INT(Outptr);                         <Find the next lowest real sample
  Temp ← Buffer[RealSamp];			  <Saves some array lookups

  IF RealSamp ≠ (BufLen-1) THEN                   <Interpolation process
    RETURN (Temp +                                           
    ((Outptr-RealSamp) * (Buffer[RealSamp+1]-Temp)))
  ELSE
    RETURN (Temp +
    ((Outptr-(RealSamp)) * (Buffer[0] - Buffer[BufLen-1])));
  END;